#include "tallergmailcalendar.h"

// Qt
#include <QGraphicsLinearLayout>

//KDE
#include <KConfigDialog>

// Plasma
#include <Plasma/TabBar>
#include <Plasma/WebView>
#include <Plasma/PushButton>
#include <Plasma/LineEdit>
//#include <Plasma/TextEdit>

//para el proxyqwidget no se uso
/*#include <QGraphicsScene>
#include <QGraphicsProxyWidget>*/

#include <QString>

TallerGmailCalendar ::TallerGmailCalendar (QObject *parent, const QVariantList &args)
    : Plasma::PopupApplet(parent, args),
        m_graphicsWidget( 0 ),
        tabs ( 0 )
{
    // el fondo standar de applet por defecto
    setHasConfigurationInterface ( true );
    
    setPopupIcon ( "nada" );//absolutely necessary!!!
    
    setAspectRatioMode ( Plasma::IgnoreAspectRatio );
}

TallerGmailCalendar ::~TallerGmailCalendar ()
{
    if (hasFailedToLaunch()) {
        // Do some cleanup here
    } else {
        // Save settings
    }
}

void TallerGmailCalendar ::autenticaUISlot()
{
      
    try{    
  
         
      QWidget * autenticaUIWidget = new QWidget;
      autenticar_ui.setupUi ( autenticaUIWidget );
      autenticaUIWidget->setVisible(true);
    
      connect ( autenticar_ui.pushButtonFara, SIGNAL ( clicked() ), this, SLOT(autenticarSlot()));
    
  }
  
  catch ( curlpp::LogicError & e ) {
	  std::cout << e.what() << std::endl;
  }
  catch ( curlpp::RuntimeError & e ) {
    std::cout << e.what() << std::endl;
  }
  catch(const std::exception& e)
  {
    std::cout << "Exception caught: " << e.what() << std::endl;
  }  
    
}


void TallerGmailCalendar ::init(){


}

//En autenticar() se obtiene un token de autorizacion para luego hacer los GET y POST
void TallerGmailCalendar ::autenticarSlot()
{ 
  try{
  curlpp::Cleanup cleaner;
  
  curlpp::Easy request;

  request.setOpt(new curlpp::options::Url("https://www.google.com/accounts/ClientLogin")); 
  //para debug descomentar la siguiente linea
  //request.setOpt(new curlpp::options::Verbose(true)); 
    
  std::list<std::string> header;   
     
    header.push_back("Content-Type: application/x-www-form-urlencoded");     
    request.setOpt(new curlpp::options::HttpHeader(header)); 
    //Obtenmos datos de conexion del usuario
    //std::string correoUsuario="svnprueba1@gmail.com";
    //std::string claveUsuario="pruebaprueba";
        
    //autenticar_ui.usuario->setText("Usuario1");
    
    correoUsuario=(autenticar_ui.vUsuario->text().toStdString());
    std::string claveUsuario=(autenticar_ui.vClave->text().toStdString());
        
    //autenticar_ui.usuario->setText(claveUsuario.data());
    //autenticar_ui.usuario->setText(claveUsuario);
        
    std::string cuerpillo="";
    //Query inicial de autenticacion
    cuerpillo.append("Email=");
    cuerpillo.append(correoUsuario);
    cuerpillo.append("&Passwd=");
    cuerpillo.append(claveUsuario);    
    cuerpillo.append("&accountType=GOOGLE&source=Google-cURL-Servicio&service=cl");
    //std::string("Email=svnprueba1@gmail.com&Passwd=pruebaprueba&accountType=GOOGLE&source=Google-cURL-Servicio&service=cl");    
    
    request.setOpt(new curlpp::options::PostFields(cuerpillo));
    request.setOpt(new curlpp::options::PostFieldSize(cuerpillo.length()));
    
    //Se guarda la autenticacion en un fichero
    std::ofstream autenticacionFile("/tmp/elplasmo2");
    autenticacionFile<<request;
    //myfile<<nombreLine;    
    autenticacionFile.close();
    
    std::ifstream autenticacionFile2("/tmp/elplasmo2");
    std::string comprobacion="";
    
    getline(autenticacionFile2,comprobacion);
    getline(autenticacionFile2,comprobacion);
    getline(autenticacionFile2,comprobacion);
    
   // QColor *colorIndicador=new QColor(); //Para el color del indicador
    
    if(strncmp(comprobacion.substr(0,5).data(),"Auth=",5)!=0)
    {
      //setFont()
      autenticar_ui.mensaje->setText("No te pudiste autenticar, intenta de nuevo...");
                 
      //autenticar_ui.indicador->setColor(colorIndicador->magentaF());
      autenticar_ui.indicador->off();
    }
    else{
      numeroEventos=0;
      tareaActual=0;
      
      autenticar_ui.mensaje->setText("Te has autenticado correctamente!");
      
      //Limpiamos el dialogo si la autenticacion fue exitosa
      autenticar_ui.vClave->clear();
      autenticar_ui.vUsuario->clear();
      
      //autenticar_ui.indicador->setColor(colorIndicador->greenF());
      autenticar_ui.indicador->on();
      tokenAutorizacion.clear();
      tokenAutorizacion.append(comprobacion.substr(5,(comprobacion.size()-5)));
      
      //Muestra el tab de calendario porque autenticamos el KUrl
      facilCal="";
      facilCal.append("http://www.google.com/calendar/embed?src=");
      facilCal.append(correoUsuario);
      facilCal.append("&ctz=");
      facilCal.append(ciudadEventos);
      
      
      KUrl url (facilCal.data());      
      
      webTab->setUrl ( url );
      
      //Traemos los eventos para hoy
      traeEventosSlot();
      //Muestra el primer evento para hoy
      adelanteEventoSlot();
      
      
      
      
      
    }
    autenticacionFile2.close();
    remove("/tmp/elplasmo2");
  }
  catch ( curlpp::LogicError & e ) {
	  std::cout << e.what() << std::endl;
  }
  catch ( curlpp::RuntimeError & e ) {
    std::cout << e.what() << std::endl;
  }
  catch(const std::exception& e)
  {
    std::cout << "Exception caught: " << e.what() << std::endl;
  }

}


void TallerGmailCalendar ::crearEventoSlot(){
  
try{ 
  
    //Si no esta autenticado no hace nada
    if(tokenAutorizacion.size()>0){
  
    std::string autorizacionHeader=std::string("Authorization: GoogleLogin auth=");
    autorizacionHeader.append(TallerGmailCalendar::tokenAutorizacion.data());

    //Con este request manejamos la creacion del evento en el calendar
    curlpp::Easy requestcrea;   
    
    //std::string nuevanentry=std::string("<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>Tennis with Beth</title><content type='text'>Meet for a quick lesson.</content><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:where valueString='Rolling Lawn Courts'></gd:where><gd:when startTime='2010-05-17T15:00:00.000Z' endTime='2010-05-17T17:00:00.000Z'></gd:when></entry>");
    
    //Construimos la entry del nuevo evento
    std::string nuevanentry="";
    nuevanentry.append("<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>");
    //nuevanentry.append("Evento Importante");//Titulo
    nuevanentry.append(TallerGmailCalendar::creaevento_ui.vTitulo->text().toStdString());    
    nuevanentry.append("</title><content type='text'>");
    //nuevanentry.append("Dormir todo el dia");//Descripcion
    nuevanentry.append(TallerGmailCalendar::creaevento_ui.vDescripcion->toPlainText().toStdString());
    nuevanentry.append("</content><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:where valueString='");
    //nuevanentry.append("En mi casa");//Lugar
    nuevanentry.append(TallerGmailCalendar::creaevento_ui.vLugar->text().toStdString());
    nuevanentry.append("'></gd:where><gd:when startTime='");
    //nuevanentry.append("2010-05-17T15:00:00.000Z");//Desde fecha,hora
    nuevanentry.append(TallerGmailCalendar::creaevento_ui.vDiaHoraInicio->dateTime().toString("yyyy-MM-ddThh:mm:ss.zzz").toStdString());       
    nuevanentry.append("' endTime='");
    //nuevanentry.append("2010-05-17T17:00:00.000Z");//Hasta fecha,hora
    nuevanentry.append(TallerGmailCalendar::creaevento_ui.vDiaHoraFin->dateTime().toString("yyyy-MM-ddThh:mm:ss.zzz").toStdString()); 
    //nuevanentry.append("'></gd:when></entry>");
    nuevanentry.append("'></gd:when></entry>");
    //Terminamos de construir la entry del evento que enviamos al calendar
    
    std::string urlultima="https://www.google.com/calendar/feeds/default/private/full";
    
    requestcrea.setOpt(new curlpp::options::Url(urlultima)); 
    
    requestcrea.setOpt(new curlpp::options::Verbose(true)); 
    std::list<std::string> headerentry;
    
    headerentry.push_back("Content-Type: application/atom+xml");
    headerentry.push_back(autorizacionHeader);    
    //header2.push_back("Content-Type: application/x-www-form-urlencoded"); 
    headerentry.push_back("GData-Version: 2");
    requestcrea.setOpt(new curlpp::options::HttpHeader(headerentry));
    
    requestcrea.setOpt(new curlpp::options::PostFields(nuevanentry));
    requestcrea.setOpt(new curlpp::options::PostFieldSize(nuevanentry.length()));
    
    //request3.setOpt(new curlpp::options::FollowLocation(true));
    requestcrea.setOpt(new curlpp::options::Header(true));
    std::ofstream nuevaentrada("/tmp/nuevaentrada");
             
    nuevaentrada << requestcrea;
    
    nuevaentrada.close();
    
    std::string galleta;
    std::ifstream lectorgalleta("/tmp/nuevaentrada"/*, ifstream::in*/);
    
    //lectorgalleta.getline(1) >> galleta;
    
    getline(lectorgalleta,galleta);
    getline(lectorgalleta,galleta);
    getline(lectorgalleta,galleta);    
    getline(lectorgalleta,galleta);
        
    requestcrea.setOpt(curlpp::options::CookieList(galleta));      
    
    //ahora usamos galleta para colocar la url con el nuevo sesion id
    getline(lectorgalleta,galleta);
    galleta=galleta.substr(10,galleta.size()-10);
    requestcrea.setOpt(new curlpp::options::Url(galleta));
    
    lectorgalleta.close();
    
    std::ofstream nuevaentrada2("/tmp/nuevaentrada");             
    //Ejecutamos con el id de redireccion y la cookie
    //requestcrea.perform();
    nuevaentrada2 << requestcrea;    
    nuevaentrada2.close();
    
    std::ifstream nuevaentrada3("/tmp/nuevaentrada");             
    std::string banderaCrearEvento="HTTP/1.1 201 Created";
    getline(nuevaentrada3,galleta);
    if(strncmp(banderaCrearEvento.data(),galleta.data(),banderaCrearEvento.size())==0){
      creaevento_ui.mensaje->setText("El evento ha sido creado exitosamente!");
      creaevento_ui.kled->on();
    }
    else{
      creaevento_ui.mensaje->setText("El evento no pudo ser creado... Intenta de nuevo");  
      creaevento_ui.kled->off();
    }
    
    nuevaentrada3.close();
    remove("/tmp/nuevaentrada");
    
    
    
    }
  }
  catch ( curlpp::LogicError & e ) {
	  std::cout << e.what() << std::endl;
  }
  catch ( curlpp::RuntimeError & e ) {
    std::cout << e.what() << std::endl;
  }
}

void TallerGmailCalendar ::mostrarUIEventoSlot(){
  
  try{    
  
    //Si no esta autenticado no hace nada
    if(tokenAutorizacion.size()>0){
      
      QWidget * crearEventoWidget = new QWidget;
      creaevento_ui.setupUi ( crearEventoWidget );
      crearEventoWidget->setVisible(true);
    
      connect ( creaevento_ui.pushButton, SIGNAL ( clicked() ), this, SLOT(crearEventoSlot()));
    }
  }
  
  catch ( curlpp::LogicError & e ) {
	  std::cout << e.what() << std::endl;
  }
  catch ( curlpp::RuntimeError & e ) {
    std::cout << e.what() << std::endl;
  }
  
  
}

void  TallerGmailCalendar ::traeEventosSlot(){
try{
  
  curlpp::Easy traeRequest;
   
  //el header
  std::list<std::string> headerTrae;
  
  std::string autorizacionHeader=std::string("Authorization: GoogleLogin auth=");
  autorizacionHeader.append(TallerGmailCalendar::tokenAutorizacion.data()); 
  
  headerTrae.push_back("Content-Type: application/atom+xml");
  headerTrae.push_back("GData-Version: 2");
  headerTrae.push_back(autorizacionHeader);
      
  traeRequest.setOpt(new curlpp::options::HttpHeader(headerTrae));
  
  
  //traemos los enventos de hoy
  
  time_t miTime = time(NULL);
  tm *miFecha = localtime(&miTime);
    
  std::stringstream convertidorAnio;
  std::stringstream convertidorMes;
  std::stringstream convertidorDia;
  
  //Año actual
  convertidorAnio << ((miFecha->tm_year)+1900);
  //Mes actual
  if(miFecha->tm_mon<10){
    convertidorMes <<"0";
    convertidorMes <<miFecha->tm_mon+1;}
  else
    convertidorMes <<miFecha->tm_mon;
  //Dia actual
  if(miFecha->tm_mday<10){
    convertidorDia <<"0";  
    convertidorDia <<miFecha->tm_mday;}
  else
    convertidorDia <<miFecha->tm_mday;
  
  
  
  
  std::string urlEventosHoy="";
  urlEventosHoy.append("https://www.google.com/calendar/feeds/default/private/full?orderby=starttime&sortorder=ascending");
  urlEventosHoy.append("&start-min=");
  urlEventosHoy.append(convertidorAnio.str());
  urlEventosHoy.append("-");
  urlEventosHoy.append(convertidorMes.str());
  urlEventosHoy.append("-");
  urlEventosHoy.append(convertidorDia.str());
  urlEventosHoy.append("T05:00:00.000&start-max=");
  urlEventosHoy.append(convertidorAnio.str());
  urlEventosHoy.append("-");
  urlEventosHoy.append(convertidorMes.str());
  urlEventosHoy.append("-");
  urlEventosHoy.append(convertidorDia.str());
  urlEventosHoy.append("T28:59:59.000");  
  //urlEventosHoy.append(ciudadEventos);
  
  
  
  
  traeRequest.setOpt(new curlpp::options::Url(urlEventosHoy));
   
  //traeRequest.setOpt(new curlpp::options::Url("https://www.google.com/calendar/feeds/default/private/full?start-min=2010-00-00T00:00:00.000Z&start-max=2010-12-25T23:59:59.000Z"));
  //Para debug
  //traeRequest.setOpt(new curlpp::options::Verbose(true)); 
  
  //Para solucionar problema de redireccion
  traeRequest.setOpt(new curlpp::options::FollowLocation(true));
    std::ofstream eventosTraidos("/tmp/eventosTraidos");
  
    eventosTraidos<< traeRequest;
    eventosTraidos.close();
    
  //sacareventosTraidos es el xml de donde vamos a sacar nuestras tareas finales
  std::ifstream sacareventosTraidos("/tmp/eventosTraidos");
  //archivo con las url de las tareas finales
  std::ofstream eventosFinal("/tmp/eventosFinal");
  //#ifdef LIBXMLCPP_EXCEPTIONS_ENABLED
  
  
  //#endif //LIBXMLCPP_EXCEPTIONS_ENABLED
    xmlpp::TextReader reader("/tmp/eventosTraidos");
  numeroEventos=0;
    while(reader.read() )			
    {
      if(reader.get_name()=="gCal:timezone" and reader.has_attributes()){
      ciudadEventos.clear();      
      ciudadEventos.append(reader.get_attribute("value"));
      }
      
      if(reader.get_name()=="link" and reader.has_attributes())
      {
	if(reader.get_attribute_count()==4)
	{//eventosFinal<<std::endl<<"wow soy el link"<<std::endl;
	numeroEventos++;
	eventosFinal<<numeroEventos<<std::endl<<reader.get_attribute("href")<<"&ctz="<<ciudadEventos.data()<<std::endl;
	
	}
      
      }
      
     
    }
  //Mostramos en el layout el numero de tareas traidas
  std::string mensajeCabezoteTrae;
  std::stringstream numeroStringEventos;
  mensajeCabezoteTrae.clear();
  numeroStringEventos.clear();
  mensajeCabezoteTrae.append("Tienes ");
  numeroStringEventos<<numeroEventos;
  mensajeCabezoteTrae.append(numeroStringEventos.str());
  mensajeCabezoteTrae.append(" eventos para hoy");
  
  cabezoteTraeEvento->setText(mensajeCabezoteTrae.data());
    
 // #ifdef LIBXMLCPP_EXCEPTIONS_ENABLED
  
}
  //excepciones para curlpp
  catch ( curlpp::LogicError & e ) {
	  std::cout << e.what() << std::endl;
  }
  catch ( curlpp::RuntimeError & e ) {
    std::cout << e.what() << std::endl;
  }
  //excepciones para libxml
  catch(const std::exception& e)
  {
    std::cout << "Exception caught: " << e.what() << std::endl;
  }
}

void TallerGmailCalendar::adelanteEventoSlot(){
try{ 
  //Si no esta autenticado no hace nada
  if(tokenAutorizacion.size()>0){
  
 
  std::ifstream lectorTraeEvento("/tmp/eventosFinal");
  std::string unicoEvento="";

  if(tareaActual==numeroEventos){}
  else
    {
    tareaActual++;
    for(int i=0;i<tareaActual;i++){
      getline(lectorTraeEvento,unicoEvento);
      getline(lectorTraeEvento,unicoEvento);}
      
    KUrl url (unicoEvento.data()); 
    webTab2->setUrl ( url );
    }

  lectorTraeEvento.close();

  }
}
  
  catch(const std::exception& e)
  {
    std::cout << "Exception caught: " << e.what() << std::endl;
  }

}


void TallerGmailCalendar::atrasEventoSlot(){

  try{
    //Si no esta autenticado no hace nada
    if(tokenAutorizacion.size()>0){
    std::ifstream lectorTraeEvento("/tmp/eventosFinal");
    std::string unicoEvento="";
    
    
      
      if(tareaActual==1 or tareaActual<1){}
      else
	{
	for(int i=0;i<(tareaActual-1);i++)
	  {getline(lectorTraeEvento,unicoEvento);
	  getline(lectorTraeEvento,unicoEvento);}

	tareaActual--;

	KUrl url (unicoEvento.data()); 
	webTab2->setUrl ( url );
	

	}
      lectorTraeEvento.close(); 
	
      }
    }
  catch(const std::exception& e)
  {
    std::cout << "Exception caught: " << e.what() << std::endl;
  }

}


QGraphicsWidget *TallerGmailCalendar ::graphicsWidget() {
    if ( !m_graphicsWidget ) 
    
    {
	ciudadEventos="";
      //El widget principal del plasmoide
	m_graphicsWidget = new QGraphicsWidget ( this );	
        m_graphicsWidget->setPreferredSize ( 650,300 );
        //Layouts 	
	QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout ( Qt::Horizontal, m_graphicsWidget );
        QGraphicsLinearLayout *crearEventoLayout = new QGraphicsLinearLayout ( Qt::Vertical );
	QGraphicsLinearLayout *traerEventoLayout = new QGraphicsLinearLayout ( Qt::Vertical );
	QGraphicsLinearLayout *cabezaDeEventoLayout = new QGraphicsLinearLayout ( Qt::Horizontal );
	QGraphicsLinearLayout *bienvenidaLayout = new QGraphicsLinearLayout ( Qt::Vertical);
                
	//---------------- crearEventoLayout ---------------------
	//Elementos para crearEventoLayout        
	crearEventoLayoutBoton = new Plasma::PushButton(this);
	crearEventoLayoutBoton->setText("Da clic aqui para crear un evento\n en tu Calendario");
	
	
	
	//Agregar elementos a crearEventoLayout	
	crearEventoLayout->addItem(crearEventoLayoutBoton);
	
	
	//-----------------traerEventoLayout -----------------------
	//Los botones de la cabecera
	actualizaEventoBoton = new Plasma::PushButton(this);
	actualizaEventoBoton->setText("Actualizar esta lista");
	actualizaEventoBoton->setMaximumHeight(30);
	atrTraeEventoBoton = new Plasma::PushButton(this);
	atrTraeEventoBoton->setText("anterior evento");
	atrTraeEventoBoton->setMaximumHeight(30);
	adeTraeEventoBoton = new Plasma::PushButton(this);
	adeTraeEventoBoton->setText("siguiente evento");
	adeTraeEventoBoton->setMaximumHeight(30);	
	
	//Un cabezote que va a mostrar el numero de eventos traidos
	cabezoteTraeEvento = new Plasma::LineEdit(this);
	cabezoteTraeEvento->setText("Autenticate primero!!");
	cabezoteTraeEvento->setFocusPolicy(Qt::NoFocus);
	cabezoteTraeEvento->setEnabled(false);	
	//Agregar elementos a traerEventoLayout
	
	cabezaDeEventoLayout->addItem(atrTraeEventoBoton);
	cabezaDeEventoLayout->addItem(adeTraeEventoBoton);
	cabezaDeEventoLayout->addItem(actualizaEventoBoton);
	
	traerEventoLayout->addItem(cabezoteTraeEvento);
	traerEventoLayout->addItem(cabezaDeEventoLayout);
	
	//-----------------bienenidaLayout --------------------
	bienvenidaBoton = new Plasma::PushButton(this);
	
	bienvenidaBoton->setText("Para comenzar a utilizar este plasmoide \n tienes que dar clic aqui y autenticarte");
	
	bienvenidaLayout->addItem(bienvenidaBoton);
	
	//Qt::Alignment *alineacion= new Qt::Alignment;
	//alineacion.QFlags();
	bienvenidaLayout->setAlignment(bienvenidaBoton,Qt::AlignCenter);
        // Tab con funconalidades
        tabs = new Plasma::TabBar ( this );
        webTab = new Plasma::WebView ( tabs );
	webTab2 = new Plasma::WebView (  );
        webTab->setSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Expanding );
	webTab2->setSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Expanding );
        
	
	facilCal="";
	facilCal.append("http://www.google.com/calendar/embed?src=");
	facilCal.append(correoUsuario);
	facilCal.append("&ctz=");
	facilCal.append(ciudadEventos);

	KUrl url (facilCal.data());
	
        webTab->setUrl ( url );
	webTab2->setUrl ( url );
        
	//Ponemos webTab2 de tareas en el layout traerEventoLayout
	traerEventoLayout->addItem(webTab2);
	tabs->addTab ( i18n ( "Bienvenido" ), bienvenidaLayout );
	tabs->addTab ( i18n ( "Hoy" ), traerEventoLayout );
	tabs->addTab ( i18n ( "Crear Evento en el Calendar" ), crearEventoLayout );
        tabs->addTab ( i18n ( "Ver mi Google Calendar" ), webTab );
	
	        
	//Casi todo se mete mainLayout
	mainLayout->addItem ( tabs );
	
        //Definimos los eventos para cuando demos clic
        connect(crearEventoLayoutBoton, SIGNAL(clicked()), this, SLOT(mostrarUIEventoSlot()));
	//Eventos adelante, atras y actualizar
	connect(adeTraeEventoBoton, SIGNAL(clicked()), this, SLOT(adelanteEventoSlot()));
	connect(atrTraeEventoBoton, SIGNAL(clicked()), this, SLOT(atrasEventoSlot()));
	connect(actualizaEventoBoton, SIGNAL(clicked()), this, SLOT(traeEventosSlot()));
	//Autenticacion
	connect(bienvenidaBoton, SIGNAL(clicked()), this, SLOT(autenticaUISlot()));
	
    }

    return m_graphicsWidget;
}



void TallerGmailCalendar::createConfigurationInterface ( KConfigDialog *parent ) {
    
    QWidget * autenticarWidget = new QWidget;
    autenticar_ui.setupUi ( autenticarWidget );
    parent->addPage ( autenticarWidget, i18n ( "Conexión a Google Calendar" ) );
    
    //Se llama a qwidget para autenticarnos
    connect ( autenticar_ui.pushButtonFara, SIGNAL ( clicked() ), this, SLOT (autenticarSlot()));
    
}


#include "tallergmailcalendar.moc"
